#ifndef LISTAASOC_H
#define LISTAASOC_H
#define LIST_SIZE 100
#include "Tuple.h"
#include "cr.h"
#include "cw.h"

typedef struct sListaAsoc *ListaAsoc;

/* constructor */
ListaAsoc
la_empty (void);

/* agrega una clave y un dato */
void
la_add (ListaAsoc l, Key k, Data d);

/* devuelve si existe la clave en la lista */
Bool
la_exists (ListaAsoc l, Key k);

/* busca un dato segun la clave
   debe llamarse solo si la_exists (l, k)
   si no lo encuentra devuelve NULL */
Data
la_search (ListaAsoc l, Key k);

/* borra la clave y el valor asociado */
void
la_del (ListaAsoc l, Key k);

/* devuelve la cantidad de elementos */
int
la_length (ListaAsoc l);

/* imprime todos los pares (Key, Data)*/
void
la_pprint (ListaAsoc l);

/* Destructor.
   Destruye la lista y su contenido */
ListaAsoc
la_destroy (ListaAsoc l);

/* Genera una lista en memoria desde
 los datos guardados en el archivo
 del disco "nomfile" */
ListaAsoc
la_fromFile (char *nomfile);

/* Genera o reescribe el archivo
 "nomfile" en disco con los datos
 de la cinta en memoria "l" */
void
la_toFile (char *nomfile, ListaAsoc l);

ListaAsoc
la_fromCinta(cr c_disco);

void
la_toCinta(cw c_disco, ListaAsoc l);

#endif
